#ifndef __PWM_H
#define __PWM_H

#include "stm32f10x.h"

typedef enum {

    OC1 = 1,
    OC2,
    OC3,
    OC4

} OC_Enum;

typedef struct {

    TIM_TypeDef *PWM_TIMx; // 生成PWM需要的时钟TIMx的地址
    OC_Enum OCx;          // 生成PWM需要的比较器

    uint16_t Freq; // 频率，建议：1k ~ 25k，Freq * Reso < 10^7
    uint16_t Reso; // 分辨率，建议：100,1000,10000频率，Freq * Reso < 10^7
    float Duty; // 占空比，范围：0 ~ 1，精度 = 1/Reso

} PWM_Builder;

int PWM_Init(PWM_Builder *PWMx);

void PWM_OC1SetDuty(PWM_Builder *PWMx, float Duty);
void PWM_OC2SetDuty(PWM_Builder *PWMx, float Duty);
void PWM_OC3SetDuty(PWM_Builder *PWMx, float Duty);
void PWM_OC4SetDuty(PWM_Builder *PWMx, float Duty);

#endif
